package com.zlp.spring.aop.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/** 
 * 自定义切面
 * @date: 2022/2/25 14:23
 */
//@Aspect
@Component
public class MyAspect {

    
    /** 
     * <p>
     *     1. @within 声明了切入 @MyAnnotation 注解，则只要标注有该注解的类下面的方法，在运行期间都会被切到，一般用于类上面。
     *        eg: @Around("@within(com.zlp.spring.aop.aop.MyAnnotation)")
     *     2. @annotation中指定的注解一般用于某个类中的具体方法上，只要标注了@annotation中指定的注解，那么该方法在运行期间就会被切面拦截到。
     *        eg: @Around("@@annotation(com.zlp.spring.aop.aop.MyAnnotation)")
     * </p>
     * @param proceed
     * @date: 2022/2/25 14:18
     * @return: java.lang.Object 
     */
    @Around("@annotation(com.zlp.spring.aop.aop.MyAnnotation)")
    public Object around(ProceedingJoinPoint proceed) throws Throwable {
        System.out.println("around... invoke ...");
        return proceed.proceed();
    }
}